﻿using System;
using System.Web;
using User.EF.Model;
using User.Global.Constvalues.Web.Navigation;
using User.Web.Common;

/// <summary>
/// Direkter Zugriff auf den DatenModelContainer zum Abfragen von Daten.
/// </summary>
public class CurrentHttpContext
{
    #region Properties
    private static string m_httpContextName = "EFDataModelHttpContextName";
    #endregion

    /// <summary>
    /// Gibt den aktuellen MainModelContainer für diesen Request zurück.
    /// </summary>
    public static MainModelContainer GetDataModel()
    {
        //Quellen:
        //http://csharpquestions.com/entity-framework/scope-of-entity-framework-object-context-in-asp-net-websites
        //http://dotnetslackers.com/articles/ado_net/Managing-Entity-Framework-ObjectContext-lifespan-and-scope-in-n-layered-ASP-NET-applications.aspx

        //Den aktuellen dataContext nur für den aktuellen Request speichern
        if (HttpContext.Current.Items[m_httpContextName] == null)
        {
            //Connectionstring wird anhand des ModelNamens aus der web.config geladen
            MainModelContainer efModelContainer = new MainModelContainer(new ConnectionStringWeb().GetConnectionString("MainModel"));
            HttpContext.Current.Items.Add(m_httpContextName, efModelContainer);
        }

        return (MainModelContainer)HttpContext.Current.Items[m_httpContextName];
    }

    /// <summary>
    /// Erstellt eine BasisURL für AjaxCalls mit "/" Am ende
    /// </summary>
    /// <param name="controller">Der Controller für den die Ajax Calls gedacht sind</param>
    /// <param name="action">die passende Aktion im Controller für die Ajax Calls</param>
    /// <param name="id">die passende ID für z.B: User oder andere Objekte</param>
    public static string AjaxUrlBuilder(EController controller, Enum action, long? id)
    {
        string virtualDir = string.Empty; //evtl. "url.../MemberManager/"
        string baseDir = string.Format("/api/{0}/{1}", controller.ToString(), action.ToString());
        if (id.HasValue)
        {
            baseDir = string.Format("{0}/{1}/", baseDir, id.Value);
        }

        if (virtualDir.Trim().Length > 0)
        {
            baseDir = string.Format("/{0}{1}", virtualDir, baseDir);
        }

        return string.Format("{0}/", baseDir.TrimEnd('/'));
    }
}
